package cn.ipanel.bigdata.boot.config

import cn.ipanel.bigdata.boot.period.Period

import scala.beans.BeanProperty

/**
 * @author lzz
 * @projectName iBigdata
 * @date 2022/7/13 17:58
 * @description:
 */
class Template extends Serializable {

  @BeanProperty var job     : String = _ // 任务名称
  @BeanProperty var intent  : String = _ // 数据的意向处理
  @BeanProperty var join    : String = _ // 数据的关联处理
  @BeanProperty var period  : String = _ // 可观测 时间周期
  @BeanProperty var fixed   : String = _ // 可观测 固定视角（待计算数据会产生翻倍）
  @BeanProperty var angle   : String = _ // 可观测 业务视角

  private[this] final lazy val SEPARATOR = '|'

  /**
   * 可观测 时间周期
   * @return
   */
  def asPeriod: Seq[Period] = _period
  private[this] final lazy val _period: Seq[Period] = {
    var ret: Seq[Period] = Seq()
    period match {
      case str: String if str.nonEmpty =>
        str.split(SEPARATOR).foreach((name: String) => { ret ++= Seq(Period.as(name)) })
      case _ =>
    }
    ret
  }

  /**
   * 可观测 固定视角
   * @return
   */
  def asFixed: Seq[String] = _fixed
  private[this] final lazy val _fixed: Seq[String] = {
    var ret: Seq[String] = Seq()
    fixed match {
      case str: String if str.nonEmpty =>
        str.split(SEPARATOR).foreach((name: String) => { ret ++= Seq(name) })
      case _ =>
    }
    ret
  }

  /**
   * 可观测 业务视角
   * @return
   */
  def asAngle: Seq[String] = _angle
  private[this] final lazy val _angle: Seq[String] = {
    var ret: Seq[String] = Seq()
    angle match {
      case str: String if str.nonEmpty =>
        str.split(SEPARATOR).foreach((name: String) => { ret ++= Seq(name) })
      case _ =>
    }
    ret
  }
}